package juego.vistas;

import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;

import principal.Constantes;

import juego.IDireccionable;
import juego.enums.tipoMovimiento;

import ar.uba.fi.algo3.titiritero.Posicionable;
import ar.uba.fi.algo3.titiritero.SuperficieDeDibujo;
import ar.uba.fi.algo3.titiritero.vista.Imagen;

public abstract class VistaDinamica extends Imagen implements IVista {
	private BufferedImage[] imagenes;
	private String[] nombreArchivosImagenes;
	private IDireccionable direccionable;
	
	private static int tipoMovimientoAInt(tipoMovimiento direccion) {
		switch(direccion) {
			case arriba: return 0;							
			case abajo: return 1;
			case derecha: return 2;
			case izquierda: return 3;
			default: return -1;
		}		
	}
	
	public VistaDinamica(SuperficieDeDibujo superficie, IDireccionable direccionable) {;	
		this.setPosicionable((Posicionable)direccionable);
		this.direccionable = direccionable;
		
		imagenes = new BufferedImage[4];
		nombreArchivosImagenes = new String[4];
	}		
	
	public void dibujar(SuperficieDeDibujo superficeDeDibujo) {

		int x = Math.round((float)(getPosicionable().getX() * Constantes.TAMANIO_CASILLA));
		int y = Math.round((float)(getPosicionable().getY() * Constantes.TAMANIO_CASILLA));

		Graphics grafico = (Graphics)superficeDeDibujo.getBuffer();
		grafico.drawImage(this.imagenes[tipoMovimientoAInt(direccionable.getDireccion())], x, y, null);
	}

	public void setNombresArchivosImagenes(String nombreArchivoImagenArriba, 
			                           String nombreArchivoImagenAbajo,
			                           String nombreArchivoImagenDerecha,
			                           String nombreArchivoImagenIzquierda) {		
		setNombreArchivoImagen(nombreArchivoImagenArriba, 0);
		setNombreArchivoImagen(nombreArchivoImagenAbajo, 1);
		setNombreArchivoImagen(nombreArchivoImagenDerecha, 2);
		setNombreArchivoImagen(nombreArchivoImagenIzquierda, 3);
	}
	
	private void setNombreArchivoImagen(String nombreArchivoImagen, int numero) {		
		this.nombreArchivosImagenes[numero] = nombreArchivoImagen;
		try {
			File f = new File(nombreArchivoImagen);			
			this.imagenes[numero] = ImageIO.read(f);			
		} catch(Exception ex) {
			System.out.println("Error cargando la imagen: " + nombreArchivoImagen);
		}			
	}
}
